package main

import "fmt"

func main() {

	var a [5]int

	//println(a) 报错
	fmt.Println(a) //[0 0 0 0 0]	//默认为0

	a[0] = 1 //修改单个元素

	//遍历1
	for i := 0; i < len(a); i++ {
		fmt.Println(a[i], &a[i]) //打印元素，和元素的地址
		/**
		0 0xc00000c3a8
		0 0xc00000c3b0	是连续的地址空间
		*/
	}

	//遍历2
	for i := range a {
		fmt.Println(i)
	}

	a = [5]int{1, 1, 1, 11, 2} //直接赋值
	fmt.Println(a)             //[1 1 1 11 2]

	//数组的长度也是数组的组成部分，
	//a= [3]int{1,1,1}	//会直接报错，因为类型不匹配

	//数组的另一种定义方式
	var b [5]int = [5]int{1: 5, 1, 1} //可以指定某些值， 1:5 代表 索引1的元素为5
	fmt.Println(b)                    //[0 5 1 1 0]

	var c [5]int = [5]int{1}

	fmt.Println(c) //[1 0 0 0 0]

	var d = [...]int{1} //可以这样，自动推断
	fmt.Println(d)      //[1]

	var e = [5]int{1, 1} //也支持这种不把所有元素都写出来
	fmt.Println(e)

}
